#include "RGB.h"

extern Adafruit_NeoPixel pixels;

#define NUMPIXELS     14  // RGB数量
#define BREATHESPEED  200 //呼吸灯的频率


unsigned long last_time = 0;
unsigned long now_time = 0;
bool change = false;

/*************************
   函数功能：角度转弧度
   函数参数：弧度
   返回值：角度
 **********************/

double D2R(double deg){
return deg / 180.0 * 3.14159265;
}

/*************************
   函数功能：红
   函数参数：无
   返回值：无
 **********************/
void mode1() //红
{
  for (int i = 0; i < NUMPIXELS; i++)
  {
    pixels.setPixelColor(i, pixels.Color(255, 0, 0));
    pixels.show();
  }
}
/*************************
   函数功能：绿
   函数参数：无
   返回值：无
 **********************/
void mode2() //绿
{
  for (int i = 0; i < NUMPIXELS; i++)
  {
    pixels.setPixelColor(i, pixels.Color(0, 255, 0));
    pixels.show();
  }
}
/*************************
   函数功能：蓝
   函数参数：无
   返回值：无
 **********************/
void mode3() //蓝
{
  for (int i = 0; i < NUMPIXELS; i++)
  {
    pixels.setPixelColor(i, pixels.Color(0, 0, 255));
    pixels.show();
  }
}
/*************************
   函数功能：呼吸灯
   函数参数：R,G,B
   返回值：无
 **********************/
void mode4(char color) //呼吸
{
  static int j = 0;
  now_time = millis();
  if(now_time - last_time >= 50) 
  {
    j++;
  for (int i = 0; i < NUMPIXELS; i++)
  {
 int val = 254*sin(D2R(j))+1;  
    switch (color) {
      case 'R':
        pixels.setPixelColor(i, pixels.Color(val, 0, 0));
        pixels.show();
        break;
      case 'G':
        pixels.setPixelColor(i, pixels.Color(0, val, 0));
        pixels.show();
        break;
      case 'B':
        pixels.setPixelColor(i, pixels.Color(0, 0, val));
        pixels.show();
        break;
      default: break;
  }
   last_time = now_time;
 }
  }
  if(j>=180) j = 0;
}
/*************************
   函数功能：红蓝相间
   函数参数：无
   返回值：无
 **********************/
void mode5()
{
  static int j = 0;
  now_time = millis();
  if ( now_time - last_time >= BREATHESPEED )
  {
    j++;
    last_time = now_time;
  }
  if (j & 1)
  {
    pixels.setPixelColor(j, pixels.Color(255, 0, 0));
    pixels.show();
  }
  else
  {
    pixels.setPixelColor(j, pixels.Color(0, 0, 255));
    pixels.show();
  }
  if (j > NUMPIXELS)
    j = 0;
}
/**********************
    函数功能：三色流水
    函数参数：无
    返回值：无
* *********************/
void mode6()
{
  static int i = 0;
  static int j = 0;
  static int k = 0;
  now_time = millis();
  if ( now_time - last_time >= 50 )
  {
    i++;
    if ( i > 3)
    {
      j++;
      pixels.setPixelColor(j, pixels.Color(0, 255, 255));
    }
    if ( j > 3)
    {
      k++;
      pixels.setPixelColor(k, pixels.Color(255, 0, 0));
    }
     pixels.setPixelColor(i, pixels.Color(0, 0, 255));
     pixels.show();
    last_time = now_time;
  }
 


  
  if ( k > NUMPIXELS) {
    k = 0;
    j = 0;
    i = 0;
  };
}
/**********************
    函数功能：随机颜色
    函数参数：无
    返回值：无
* *********************/
void mode7()
{
  now_time = millis();
  int pin = random(14);
  int val1 = random(255);
  int val2 = random(255);
  int val3 = random(255);
  pixels.setPixelColor(pin, pixels.Color(val1, val2, val3));
  if ( now_time - last_time >= 100 )
  {
    pixels.show();
    last_time = now_time;
  }

}
